关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站
点击跳转“创龙科技服务通”

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

查看: 7426|回复: 5
打印 上一主题 下一主题

关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构9 e' W% ~- Y: T+ J2 t% d" D

+ l, v: p3 \- U& a    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256% M3 a1 X0 R% r
; I6 p2 H  P( R( f4 u
其他程序段。。。。。$ q' W* }1 `4 F9 c( I

1 {7 k5 {: K8 F' @; U7 ]& e   free(x_d);
  |7 H1 k- g7 k- y% j5 [" j
" D, W: |* q% j' @/ i使用DSP侧单独调试功能,验证动态申请没有问题,
  ?* _% k6 M7 h2 d& u) c3 I
  G8 }8 |$ P# ?# W* x但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
& S" O$ U/ J. [
3 J) d  e8 D! e5 r
1 t- W: e4 g' o( N3 Z

; s& T+ V% }) b; v- k
* b5 [2 |& i+ ^! P9 W6 T7 a+ }6 K9 ~

6 y' Q/ ^- h8 T1 ^- `
$ u' _$ ]4 y" ]4 x6 A. j/ N4 w$ P$ T6 {, ~8 `
3 \" F7 `% W7 c; g- i2 i
, j9 `2 j& m5 u: Y& O
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明- u5 n: M# R4 J" S2 H. s3 k9 {$ t
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
6 [! m5 B& f- Y) H(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
( ]( {2 ]7 o% {1 F2 g* W% \
. @/ k+ c9 N, o) [% r5 }' S, B0 R
是不是需要在DSP.CFG中进行配置
$ _  X2 l6 W( F3 a我现在的配置为( I+ r6 C, I# J6 D

  v# X5 Y3 L1 ?% M8 m; T" c/*) p, j' U/ y/ K3 t2 }6 t9 b
*  ======== Operating System Configuration ========
3 x1 X) z; x; k4 @. ^5 ]2 m */
/ z6 C/ b: g) {2 {  b) a( e7 Y6 L. q) r* m0 t
/* no rts heap */& v1 @7 o; m  I4 e! }
Program.heap = 0;+ w$ K. r) {( E5 [
Program.argSize = 100;  /* minimum size */
1 P% V( N6 _9 ~* ]Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大- A5 P  h5 p. a! s# l
/ l% B1 b: l! {+ j
/* create a default heap */
6 B9 g' _) p7 h( B5 svar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');) f8 u+ I+ B" ?2 g
var heapMemParams = new HeapMem.Params();0 h+ f5 P% E; X
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大+ ?; e6 ?0 ?9 q& q3 m) y& F2 ^

% J; A4 {4 m  X1 [
var Memory = xdc.useModule('xdc.runtime.Memory');' I# b- r$ Q  |+ Y3 a0 T* i5 R2 D
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
( q, o/ ^: i! b+ R% I( B' w) X8 d  c, _+ c' w# n
/* configure System module */. ^# c( W  g. v1 W- t9 ]' q
var SysMin = xdc.useModule('xdc.runtime.SysMin');& k# ]* C* B0 ~
SysMin.bufSize = 0x1000;
1 {" f, \% B8 ^4 aSysMin.flushAtExit = false;
6 u  w% `. [/ i  i( r# e
7 Y% s$ m3 i, E( v  y' Hvar System = xdc.useModule('xdc.runtime.System');9 h9 b4 [( p* ^* y
System.SupportProxy = SysMin;
1 D* Y' v# \8 N. l; D( {& ?5 }
  N$ b/ F4 n, ?" q/* configure SysBios to use the lower half of Timer 1 */
- U7 K  n# h0 K+ t# w8 Kvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');* B! M, A' @. x$ `0 |- T9 l7 s  b
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
6 A+ Q8 a' k* b% ETimer.timerSettings[1].master = true;
" `7 p" @  N# \: ~  f4 MTimer.defaultHalf = Timer.Half_LOWER;
) e. Z+ y$ m8 }" F9 N; x7 UClock.timerId = 1;: X7 e2 U+ g  A9 A% ]# ?& S% R
/ P! O+ @( r+ @% o2 w5 g0 O6 o

7 M5 f$ q. ^& t$ n, w/*
3 c* j6 g( L5 X2 D1 m *  ======== Miscellaneous Configuration ========0 R  @3 V( t% E6 s
*/, _" {6 ?9 M  m% m1 B" r( X
* c  O3 r4 ]! `# w/ ?  @
/* set default diags mask */
  n5 N& s  B" T( m4 Fvar Diags = xdc.useModule('xdc.runtime.Diags');9 l& ?- f. G1 F0 K2 T. @
var Defaults = xdc.useModule('xdc.runtime.Defaults');
$ c  w2 ^, p2 r# `2 n
$ b0 @4 ^2 L9 t: m) Z2 n: V+ DDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;7 v# _: C+ }# h$ _2 d: u
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
9 k; W' W, ]" F$ O! w" @; `Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;, t" ^2 x+ n, ~/ \" g
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
! `5 E0 L% E5 ^1 ~Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */4 U  Q1 a/ y  k
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
; U+ X; E5 e5 \Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;8 k6 i; [3 m! K: U
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
* y& ~$ r* ^6 q7 c# q+ eDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;  H: U: Y7 W( E* N) A& E4 {) P
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
# k6 `4 P; S+ A6 xDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
  Z( }( K4 N8 sDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
+ b6 ]* w8 A# TDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;  x2 a) O, m, @) u8 S' _0 g
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;/ `. z  ~+ K& _: _; C# D
  a& e; K/ r* S8 x/ g1 Y4 J
/* override diags mask for selected modules */
+ P. ]. L) N! kxdc.useModule('xdc.runtime.Main');9 d  m0 W. e' t* Z/ j, g
Diags.setMaskMeta(
1 i9 [! R0 i7 O& B- P& W    "xdc.runtime.Main",
( @  q  b7 f1 g9 Z- o! v    Diags.ENTRY | Diags.EXIT | Diags.INFO,
0 }6 Z1 U- Q* U    Diags.RUNTIME_ON
1 ]4 g& o, S2 U( o/ B1 [/ h4 U) x  n);! p* D8 C) [; d, |! S' Z1 ~

8 k- U. d7 B, ]- L. C4 Y' [# nvar Registry = xdc.useModule('xdc.runtime.Registry');/ x4 M& f- I4 r! D
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;+ T1 w8 j( k  w7 v
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
% q, Z+ q4 t+ xRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;
) g7 a, G; p7 v0 oRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;8 v. g6 B; u$ B+ b, I3 |: U% B
7 S2 h6 h, X; h, R
/* create a logger instance */$ T  }" N. \0 h& s2 s9 }) R
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
: I8 n- ~& g5 j# ^# z5 ^7 hvar loggerBufP = new LoggerBuf.Params();% {- J4 x0 P5 z* M* p) ^% e
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
9 R# B. U, J' c+ T$ h$ ^0 R) s. [loggerBufP.bufType = LoggerBuf.BufType_FIXED;
* }& ^: r/ |* p0 s* d6 c$ I( }+ e$ g7 i( c
var appLogger = LoggerBuf.create(loggerBufP);
# W4 x% V9 \# OappLogger.instance.name = "AppLog_Core1";1 O1 d* [& D2 n- K8 ?4 a
Defaults.common$.logger = appLogger;
# f& U9 s7 k# o9 b7 OMemory.defaultHeapSize = 0x8192;   
6 J, t# ?  k/ W7 p) s; |Idle.idleFxns[0] = "&LEDStatus";
. o4 e# q1 T' g8 |  RCache.initSize.l2Size = Cache.L2Size_32K;
3 Q$ `8 _# r  f% [: l  O  L/ l5 G  {
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
板凳
 楼主| 发表于 2015-9-7 15:38:00 | 只看该作者
为什么没人回答呢?   大家都不用动态申请内存方式吗?
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */
+ O3 X* M& X5 Q: Y/ S) bvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');6 m8 k3 Z. G6 ?6 B( ?8 v
var heapMemParams = new HeapMem.Params();, b0 v  k3 w- Q5 q
heapMemParams.size = 0x4000;
+ |2 c* J8 q% U( n, }, o0 P5 U% g% O7 y0 `  }0 W
var Memory = xdc.useModule('xdc.runtime.Memory');; _# T% _! A/ G- k! J
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);& Y/ U3 ^& V; M  C& o
  K; Y1 ]+ o" D  N4 O
我大约calloc  每次共计大小为5K*16bits,
4 G) j9 b* x' K$ u0 E而默认配置才0x4000、需要改大。, T& E6 d1 d. N2 z* w! }; k

6 H' ]- h8 u) m. a4 x2 x$ A! }3 F
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */% v# m/ ^; R8 i: V" ?- ~
Program.heap = 0;
% b+ g5 r" E# [Program.argSize = 100;  /* minimum size */
3 {' |/ Y2 k0 Y; e5 A0 w5 e  }Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
6#
发表于 2015-10-31 20:55:50 来自手机 | 只看该作者
这个问题,我再测试一下,过两天实测后给你答复!
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

点击跳转“创龙科技服务通”

QQ|手机版|小黑屋|嵌入式开发者社区 ( 粤ICP备15055271号

GMT+8, 2026-1-26 01:48 , Processed in 0.044966 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

快速回复 返回顶部 返回列表