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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
* B7 E% v1 {* u) l* {( r' n5 r: {
$ ], t# l0 R6 H+ s    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //2569 L( R9 Z) n* k
9 ]& p6 W* A! O) ]$ M
其他程序段。。。。。
- I$ w4 K- g. m  D - A9 a  M: O. `, M4 X
   free(x_d);' T7 ?/ Y' y/ |: }. H6 w/ K0 z

" x; k/ Q: N8 |  o& a+ o8 M( T" U; S使用DSP侧单独调试功能,验证动态申请没有问题,
: e0 D# ?5 }1 H# R8 q! `
7 `) E  O2 l! `8 K$ b但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。7 q6 G" T, l4 K) A' ?9 r( v& E- w9 I
& t" u, d2 V6 b* e8 @9 O% }. @
* e  N5 s3 m5 |0 p" w/ ]
  M5 D" J2 i- s, G* y

* k' \9 @- g& K! ?" W7 k) B8 j/ _+ @! P/ b
; N0 R9 f4 F. D" c; x3 D
, f8 j: S+ I% @# H

* U) J+ P; L) S: W8 {- ^7 z9 I/ R! k- V' c* M
( g, W  V# A0 ^5 a7 B' L5 m
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
! k; v+ z: b) J' sProgram.heap = 0;
( z% M- \' L; i7 C7 SProgram.argSize = 100;  /* minimum size */* K" _) a- [9 y! I+ r# U, k6 A
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */1 f( U; \$ j# p  t
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
1 Q, t: k7 y7 t% I6 J! p# lvar heapMemParams = new HeapMem.Params();
4 R0 G, g' ^( U; P% mheapMemParams.size = 0x4000;9 {" Y% Z0 y8 i- u4 Q* D
- |' m4 `! _& o7 U. `8 `
var Memory = xdc.useModule('xdc.runtime.Memory');! I, M2 j' K0 }  o# l/ ^
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);/ s9 M8 H8 P. }3 w4 {; r4 y

0 S! v. T6 T# K! l5 H7 Q2 T我大约calloc  每次共计大小为5K*16bits,
$ u( {, K; {- |+ S  v6 u而默认配置才0x4000、需要改大。
; e" W  i4 _0 b) q% g, h% P" w! \9 X: f8 z! O3 n
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
1 l" c" n* X6 Z; `1 I8 U5 z我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下+ k* m7 c/ O9 f, M9 }" @
(不过疑惑的是,为何单独DSP仿真就没有问题呢?)) Z- J8 A$ E: o- P& R8 Y' R( c# ]
% u/ Z: l) _, J. Z: s
是不是需要在DSP.CFG中进行配置
! q, c- P4 ^# G, k! N9 ~我现在的配置为
2 ?* n& o: Y' r9 n6 g7 O0 G% G! {: @- W
/** V* k" Q: v. \7 w! C: ^9 N
*  ======== Operating System Configuration ========
: U. ^; z6 u' f% ~, Q *// [1 O; r0 k, |1 G

! ^+ }; S4 Y8 c* i: Y; Q. {/* no rts heap */0 B: u: N' O4 R9 G! p( [
Program.heap = 0;, |  \% B) Q5 b
Program.argSize = 100;  /* minimum size */
9 }. t: f* m+ G+ X! p. iProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
1 E, O& a* p* K# N( h
* i$ N( C" K" G/* create a default heap */" P! J4 [! J3 G# W
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
6 \8 c/ k6 c* @7 g2 _3 a" a- b$ D2 Vvar heapMemParams = new HeapMem.Params();
5 ]' L$ X. a+ J1 gheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大% t: _; h3 U+ f; K
" z0 t) G" Y& d
var Memory = xdc.useModule('xdc.runtime.Memory');
( Q2 u* W: S* n; ]/ FMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
0 `$ {  R' `9 r" M$ n) C+ }: f* \) z0 Q# j3 X
/* configure System module */
: y" f# |: X8 x2 d! H" \var SysMin = xdc.useModule('xdc.runtime.SysMin');/ ?9 Z; u9 ~0 \. H( _# L7 A
SysMin.bufSize = 0x1000;
& t5 G1 H, r4 j! ?( zSysMin.flushAtExit = false;9 w; R0 x$ v5 f, n  ?- f; Q

2 o+ C, P* d9 w  D9 ?" Svar System = xdc.useModule('xdc.runtime.System');+ g( Q3 E; Q' ]  {
System.SupportProxy = SysMin;& b+ U# _0 q# ~. y  ?. F7 Q

2 b6 q. ~  M4 o1 J3 N  [' H/* configure SysBios to use the lower half of Timer 1 */! [  E1 A: a/ r, j2 D1 x  U) L
var Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');; g; Q0 t# A/ G
var Clock = xdc.useModule('ti.sysbios.knl.Clock');4 [- y) Z4 r' K1 o0 A
Timer.timerSettings[1].master = true;/ p- {" z- c" B/ Z4 K1 n0 b4 S
Timer.defaultHalf = Timer.Half_LOWER;* d  u: [) K6 X5 U
Clock.timerId = 1;0 c- |$ b( Y$ }$ Q
# D" [/ _1 b# B# m, W

; v$ i$ p+ q7 K8 n- q& h5 C/*. j. {* \2 h; e2 E& h6 ^; I$ e
*  ======== Miscellaneous Configuration ========& N  S4 b/ R5 b" s6 q
*/
( [2 Z  R" G& H4 Z
% ~# i( C) p; C5 _' d/* set default diags mask */
1 F8 v. |+ g; E2 u9 Z. U! R% Bvar Diags = xdc.useModule('xdc.runtime.Diags');
8 s9 Z6 ~: I% r. v' D  `% uvar Defaults = xdc.useModule('xdc.runtime.Defaults');
' n  @( _+ J( R; f& P$ x: I
7 \2 v: K- U" W3 `% KDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;8 z4 {, T9 G% p
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
( H: N, V9 g3 f5 m% p/ ], qDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;* M! k# J6 D' L' B  l2 Q
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */# |+ b1 I+ y! K5 ?' I* ~
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
* ]' a5 k! @5 r& i4 gDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;. a* l) Y% s2 y, j4 \9 c9 }% s
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;4 e1 k7 K( ]2 M5 \0 X; Y" P
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;  g7 f' k& V9 m/ t: Z8 \* T
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;3 ^, {$ }7 E% i0 d; p: \
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
/ b4 q5 G- O' f; |9 J+ T5 _4 f, ~Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;" G( e$ I% h; d! I
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
9 I& L% p: C" \Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;; k  y7 e2 c/ ^: A6 [& m
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;6 }1 `8 f% d* X$ i1 r0 w& S

; J! R  f% s7 o* i! ?/* override diags mask for selected modules */% g. x; e4 [" u: M# X
xdc.useModule('xdc.runtime.Main');9 |2 _# s( M  ?
Diags.setMaskMeta(
( ^: R" ^+ e0 x1 T( {8 q/ Y; |    "xdc.runtime.Main",! w! s$ T8 Y1 d! P# [
    Diags.ENTRY | Diags.EXIT | Diags.INFO,2 Q& \( ~' U# U& S) D
    Diags.RUNTIME_ON
" d3 J0 d+ [2 r2 ?  }) f  r- N! Z);
$ a! X1 _6 r. g+ \! _3 _
! r' i6 j4 c1 G6 k9 ~6 lvar Registry = xdc.useModule('xdc.runtime.Registry');
' E- H+ K  q. t5 {Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;% z7 N1 i% N; ^' T& s6 j# [
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;( h, ~  Z+ ]: j9 D
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
: J3 B5 g, e  a; I) v8 _3 SRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;
4 N( H; S7 y! s6 ^" S
1 S- ~  Z& p3 o" m/* create a logger instance */
, U8 G. ?. p+ i' ?. J5 [# ]var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');1 _$ F: |9 w- l' {- M8 E! ~4 v, ?, K
var loggerBufP = new LoggerBuf.Params();' \5 @1 s( d+ m& O0 N2 b; Q+ m$ _
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */6 U; j4 }/ B/ e
loggerBufP.bufType = LoggerBuf.BufType_FIXED;, k6 h$ `7 \7 X

7 ]3 H! j5 G8 x' ^+ v1 v& N2 Zvar appLogger = LoggerBuf.create(loggerBufP);
8 m1 [8 M( a) |: ]# n9 [6 `6 q9 g+ KappLogger.instance.name = "AppLog_Core1";
3 S8 f, H% D. o  R! NDefaults.common$.logger = appLogger;5 P, c1 s, k& A! n! f2 P
Memory.defaultHeapSize = 0x8192;   
  j  j- R2 i. v* P3 a$ mIdle.idleFxns[0] = "&LEDStatus";
  m# [+ ~& B1 X: ]9 j7 A5 g; U' u. N, LCache.initSize.l2Size = Cache.L2Size_32K;* g- q0 R* {& m
+ m6 J, y9 q6 ^
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-1-27 19:08 , Processed in 0.050490 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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