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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
/ |  U. b9 z, k) w3 h$ ~9 v! `3 s& g, j! T1 |) U3 X( E9 i
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256# m( c  y2 y" r

7 C1 n3 o5 s5 t" D9 e* I其他程序段。。。。。" v2 o- C" ?  V& m. B6 x+ B- t" v
  l  T0 B7 ]5 E& e
   free(x_d);0 V- U1 h! _& @! v' u$ @) f# z1 \
* j0 V) ]+ \$ ]
使用DSP侧单独调试功能,验证动态申请没有问题,/ C0 ?$ `0 ]8 W5 j5 x
" ^& k; x7 y. o7 X, g5 Y
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。# O* D7 N+ m* U7 g+ P- H  ~' L

: K9 A- E1 C: K' J" F" p9 j
' c+ f1 v+ m8 B9 J' N: g8 F+ K6 [# c5 ^: }

% f/ `# }. p! t& p( n- d
" ^/ t( Q& q0 ]. M- l  n/ N/ k& m# q) s, a
$ z& M' w! ]8 L4 Y" i1 V

$ O0 W7 {: T5 e9 {
3 m5 ^9 O" C; C4 E* I! S7 \" Y( |$ j# V7 S6 m6 ?  C
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
# V8 q  ?8 z+ h# q; P我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
. u! x- n/ V6 e" [(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
; c1 a$ T) [  c6 j; m

7 I3 d4 [$ l4 G9 x/ g是不是需要在DSP.CFG中进行配置
3 e0 k5 q: V  ]6 T/ _我现在的配置为
: _1 n+ a& ~. t4 S
$ d! d- O! [7 [$ d* A3 z, I/*3 u8 e' S2 M  v# K; a
*  ======== Operating System Configuration ========( Z3 I+ y& [4 Y# p& ?
*/, s3 @; D6 Y1 n' R4 X6 e" @! C

/ @. [, i# [( `  l- n# `: `0 w7 y/* no rts heap */
" y0 @5 G4 F2 e: y+ Y- Z; M* BProgram.heap = 0;
- Z" j& E' y' ?$ V  V) h- gProgram.argSize = 100;  /* minimum size */
& Q& L, q1 D! c1 r& l8 pProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
3 I2 B7 N+ \% n+ k. r
2 X  \. E5 ?0 M) p& y7 R/* create a default heap */
1 p$ {7 c, X  _var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
% V% g1 D  F; w2 ^' M' evar heapMemParams = new HeapMem.Params();, t" X, u8 H9 k$ n  s: |. M6 n
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
+ ^8 f- m4 l7 S2 w# {+ K) l& Q! y& L
var Memory = xdc.useModule('xdc.runtime.Memory');
$ K& C( k+ _" ?" l+ W5 r, E1 [Memory.defaultHeapInstance = HeapMem.create(heapMemParams);( r5 s( t0 s) F: h7 i0 R
& D9 ]2 U) B( E# w5 e7 o
/* configure System module */7 J, F5 T" v/ k: D  _# Z
var SysMin = xdc.useModule('xdc.runtime.SysMin');  _. V8 }& Y8 H4 `5 ?$ a5 A$ V
SysMin.bufSize = 0x1000;! `4 L! B! \4 z) p. b; Q
SysMin.flushAtExit = false;( m" C: s7 G$ r1 d. l
: U( ^) m9 v- {; Y
var System = xdc.useModule('xdc.runtime.System');/ E# m* K  E; u# r" s
System.SupportProxy = SysMin;
& K* l0 L% b  M+ E* p0 X" n) q. ^, q. o3 F' a0 X
/* configure SysBios to use the lower half of Timer 1 */
& P: I" F, z0 Z. b' F  lvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
- |  l% o- R7 B  J6 }7 B2 |8 A% U3 Svar Clock = xdc.useModule('ti.sysbios.knl.Clock');
1 q/ ?: A" a6 [2 s  Y6 OTimer.timerSettings[1].master = true;
1 i+ R& K& N. RTimer.defaultHalf = Timer.Half_LOWER;$ _6 E8 F- |- _
Clock.timerId = 1;! ]! ?/ Q& ]& {1 `7 t8 G* c

7 _1 w) v4 t8 v. _; Q( J
" @. A2 E5 d4 x2 W( V$ V7 t8 U/*
) W2 N, {, F. ^! V/ T$ k *  ======== Miscellaneous Configuration ========5 G- J% n9 I% x( o
*/4 @6 V( S$ O4 ~. y

, V, P/ m" w7 G( ^/* set default diags mask */
+ Y5 O! y/ p2 Jvar Diags = xdc.useModule('xdc.runtime.Diags');
% z1 ^2 e0 c7 l& f$ nvar Defaults = xdc.useModule('xdc.runtime.Defaults');9 }+ _! Q0 m5 w/ B  Y( G8 H

0 [; i- L$ g1 Q/ c' o/ N, _Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;) C* l+ k$ ^! J3 B5 b0 }/ F
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;7 T7 ~; i8 M5 [, E2 {; t4 e, x
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;. O# Z' V% I: `" {
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
8 o9 p% z6 R+ h7 s9 }, V/ zDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */' W, U+ ?* t  f5 L" V  m
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;$ G& l1 r& Z+ \0 v5 |6 f1 b; O
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
# R5 r1 |1 e+ K1 V% T3 q0 ?Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
' d' V2 |- Y- O  Y7 k# qDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;
. O5 [# o# i' |$ t4 t6 {$ QDefaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
' n' e4 t+ _& N" I9 E( zDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;( [9 t& g! j, k6 ^/ S9 t
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
+ X7 S  q9 s/ T3 ?Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
4 a  r0 w( A, r" YDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
) \3 \" A) m. m8 I" r- g( Y! [' {, l7 U, F: L6 _- _
/* override diags mask for selected modules */: i3 ~5 K. T4 z
xdc.useModule('xdc.runtime.Main');* t! _9 ~; o4 C5 J9 h# F0 E3 w% C9 N
Diags.setMaskMeta(# K4 z# H' |1 T9 |$ Q
    "xdc.runtime.Main",
' i2 e- R: T5 o: ]' ]* c  k    Diags.ENTRY | Diags.EXIT | Diags.INFO,
' }( s0 @' _) q8 J5 }    Diags.RUNTIME_ON8 H" d" C* D0 @% z3 U9 g" `# d
);" b; B0 z0 f! i% _' l+ q) L- A
4 m% W+ t# R4 T
var Registry = xdc.useModule('xdc.runtime.Registry');2 [$ v3 N5 q9 f' B, j: t: E5 S
Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
/ Q" L8 \$ m: f7 iRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
" _: r  Z! X1 `. g) XRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;; P( P2 N0 ~+ f  d
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
, l' O! ?" F* d; j0 E% `
) x; q$ U! d" J- G0 ~/* create a logger instance */
% a9 Z, }& Y& C0 a  {$ I! bvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
7 ?, r( k! e& z4 |5 C7 {var loggerBufP = new LoggerBuf.Params();3 ~4 M6 V1 m% f6 |
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
6 V0 [" u/ M4 b' `) L" KloggerBufP.bufType = LoggerBuf.BufType_FIXED;
/ L" x5 K# H; j
3 k) ]" L2 A/ Vvar appLogger = LoggerBuf.create(loggerBufP);/ k+ A% i4 O. l( A2 ?0 K% O
appLogger.instance.name = "AppLog_Core1";# l8 l' R7 r9 W; [& _# n* [
Defaults.common$.logger = appLogger;5 A" P( I$ G% x& A
Memory.defaultHeapSize = 0x8192;    % M/ E. I$ e% }+ N, _
Idle.idleFxns[0] = "&LEDStatus";# X% I$ ~) l% ^. s6 z
Cache.initSize.l2Size = Cache.L2Size_32K;9 j% s. O1 c% t9 [
8 O" \" v7 B/ d
回复 支持 反对

使用道具 举报

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 */
: B" [# B1 L5 q) q  Rvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');0 w+ w* k  r2 N* f9 g
var heapMemParams = new HeapMem.Params();% N' R6 Z- G( T" h% k
heapMemParams.size = 0x4000;- j- z& D5 @$ R$ n+ K
2 T; n+ S7 D( N) Z
var Memory = xdc.useModule('xdc.runtime.Memory');
: v3 x3 v: ?+ JMemory.defaultHeapInstance = HeapMem.create(heapMemParams);( W1 B5 F2 P. z0 a
- d6 z  \- c' z/ t- A
我大约calloc  每次共计大小为5K*16bits,
  _2 |/ `+ F% N/ u- ]. i9 s而默认配置才0x4000、需要改大。0 {+ w7 ^5 C. ~- e: [

" o! z# n8 b1 x# T
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */1 _5 z' \3 O" C! }+ P, e' |
Program.heap = 0;/ L; E( i  ~5 r8 K* i
Program.argSize = 100;  /* minimum size */
1 }/ l, P2 h9 t  l3 A/ D% M" yProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-15 00:53 , Processed in 0.041732 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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