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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |正序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
$ A7 [1 p# q- p2 c5 x. X0 R+ L
' p- a( w6 K; L3 o5 |! U+ w    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256' p$ X6 D3 _1 ^7 k0 b
5 y7 b( A; ?/ K9 b6 v! i+ l
其他程序段。。。。。8 [  [' r6 E# E2 u
* I+ {" s* j* `" M& B. X+ O
   free(x_d);
4 \3 u# P* J. l; R: g, o. r3 I" l1 |
使用DSP侧单独调试功能,验证动态申请没有问题,6 q. K6 _5 g$ G& ^; @
3 a$ @) n! k, r
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
- b1 [; T) J- M' t( A2 C" u

  l! M# _5 i, R5 p& f8 e2 ?
7 N+ ]& q. q# C. J: q4 N1 U0 A
" H6 Y/ e4 I0 i- l% m4 {2 A) k$ Y. f8 T( }7 a5 b

  C, N0 ~! b7 @8 B! W7 N: P2 p; f, Y" n- B# `: o

. H+ m1 K/ |& i, b9 G# w
3 j8 n! I, p2 f& ^3 X, s" S. r; Y& [; D" M9 x7 j+ H
0 r  x# t: S( g" x
分享到:  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 */9 f' E7 y! ?! S5 a2 `7 P; E! \
Program.heap = 0;( q# y! b4 Y* k9 T
Program.argSize = 100;  /* minimum size */
2 X( d7 }* L2 v3 zProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

积分
1093
地板
发表于 2015-10-28 09:51:31 | 只看该作者
/* create a default heap */( i" J0 ?( v4 L+ n; u1 d
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');& V4 j" B1 w* p
var heapMemParams = new HeapMem.Params();
9 E) o5 N3 T1 a- V# t* C0 }  theapMemParams.size = 0x4000;# z( w9 ?: \! S5 g
( G# d- S! {- H; J* s
var Memory = xdc.useModule('xdc.runtime.Memory');* n( O# D3 k, U1 |; l. g
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);/ p3 O& ]# J# S0 J

( X/ X9 l, w3 C% ?. C4 C3 w( ?, T7 W我大约calloc  每次共计大小为5K*16bits,4 {  W9 k5 T1 l  C
而默认配置才0x4000、需要改大。
) Z& i# C+ y- h" N& J4 R3 v& a2 E+ ]- D6 Q6 v, n5 p- Q1 y
回复 支持 反对

使用道具 举报

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 | 只看该作者
补充说明6 h( ]0 x. D8 h3 B. D2 `) E9 {
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
- m: S. A6 E. a4 z(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
. ^+ o% J4 @$ b$ q% E
# k% z* l$ ~( J' f
是不是需要在DSP.CFG中进行配置
+ q- u& A0 S& |5 x0 {% v/ P我现在的配置为
# d: @  f& _9 T+ ~& ?
8 k* U% O, H3 J( y. g9 ]/*. `2 H, y  e) g
*  ======== Operating System Configuration ========' V6 X' P6 y5 z) a% m
*// z& a7 E& E: a3 i, O+ b# {
1 V9 r- X! v% D- x3 A! ~! ]3 G
/* no rts heap */2 k8 P; A& C$ B. x. o/ k, C& M6 A
Program.heap = 0;1 g! a/ Y1 y+ m" @
Program.argSize = 100;  /* minimum size */
; e+ v* B% q; v5 d4 b$ |; `7 `4 SProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大+ {5 _& ~. k9 O% C. k

$ ~- L% J/ C' ]9 a, b! Z/* create a default heap */
- v7 A- \" z+ x  Bvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
* ~; i1 G9 ~1 rvar heapMemParams = new HeapMem.Params();
5 K* }0 t/ |* KheapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大; y  t; ]4 v4 h. ~

1 o) A+ m' ~& O
var Memory = xdc.useModule('xdc.runtime.Memory');
6 S6 d) W9 ^' WMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
3 h  {  K4 {0 V/ a) ~
! B& }. ~- a2 S1 a. f& Y# v' ^1 r/* configure System module */
2 k$ }. X/ w% {5 V: Svar SysMin = xdc.useModule('xdc.runtime.SysMin');% `) M( y# ?1 n; A  a" Y& }; I% S) ]
SysMin.bufSize = 0x1000;1 H; b( W" k( t8 [* J+ ~
SysMin.flushAtExit = false;; @  `5 L- _7 q  C# p% ?

$ [9 v$ |& d) L0 R) P' b( R3 wvar System = xdc.useModule('xdc.runtime.System');
2 x4 S0 J9 y( S% @! @System.SupportProxy = SysMin;# ?: S/ |- `: V& C, Y
3 C' u. L7 Y5 h* o& |, ?9 N
/* configure SysBios to use the lower half of Timer 1 */
( g; x' @4 a' c/ R/ cvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');! K8 k; E% `$ A2 I7 v
var Clock = xdc.useModule('ti.sysbios.knl.Clock');
# Q  D( j5 ^% X( D' Y: B9 n; JTimer.timerSettings[1].master = true;" P$ p0 q! L. j  |4 @
Timer.defaultHalf = Timer.Half_LOWER;
3 W3 i+ _" l& J' S+ jClock.timerId = 1;+ H( w5 X, q$ S0 P, a* u$ J

2 {9 v# {6 U6 ?
* q5 ^/ ~3 I% H9 ?% j6 g! q; P/*) b) I7 e. [2 i1 A" ^' V0 |. X$ w
*  ======== Miscellaneous Configuration ========
7 Q- g  A+ w+ L( s */  M: H7 A3 c5 ~& g0 K3 b4 v3 ?% N# l
% W( {# s% F+ b! t
/* set default diags mask */
7 j+ O7 D- a" ~; g" b& nvar Diags = xdc.useModule('xdc.runtime.Diags');
% _, m- K( @7 k) [) O- K& Pvar Defaults = xdc.useModule('xdc.runtime.Defaults');
6 `8 Y: K* E/ `! x
, d5 g+ a3 d( v+ U# ?( \6 n5 ^Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;8 n# B3 v( Z( c/ r- [
Defaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
* v0 m8 [  \$ f7 S3 `% q$ UDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
7 k# K1 x0 N0 I: a% s/ k8 R6 WDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
7 _1 L! k. F4 f! H( PDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
' v) Y; w7 P: bDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
; Q' o; y0 {0 i: n& sDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;; Q) U( }0 r$ z! V
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;- D4 F1 |5 @7 M! ^6 w9 S  s
Defaults.common$.diags_USER3     = Diags.ALWAYS_OFF;" {8 {, O" M1 I3 g
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;" }8 L' I) N' N3 h$ A* z  V
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
1 |6 J7 G& D1 L9 G# UDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;
: P: n" Z, ~  k) Y, y# ?0 mDefaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
  o8 i, {; A: ^) E$ k2 X9 [Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
" R) ]* B! I( ~$ y. n: k/ F" s- {9 Z) X
/* override diags mask for selected modules */- Z3 W9 b8 n7 z1 \* @2 z8 K: _5 A; D
xdc.useModule('xdc.runtime.Main');
- f% [5 _) @8 ?8 ZDiags.setMaskMeta(5 i- F% G) r3 c8 H0 [# |. M
    "xdc.runtime.Main",* n1 U' F. p2 N8 z9 G0 L/ n2 n" u
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
+ v' C. H: F' }6 T) z    Diags.RUNTIME_ON7 P  `" d  E6 Q& F# o
);
# a- y( `# M4 j7 `& j! u. C5 D' f$ u- u+ J* C; ~
var Registry = xdc.useModule('xdc.runtime.Registry');
4 j' Z6 y0 C/ a0 U0 YRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;- z/ t. V( y  [) @/ m
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;: |/ t1 V: g0 S% P  i* _
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
1 D$ g: ], |& u7 r9 h. h7 }Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
, _$ u+ Y" }- k7 m- b7 o, K4 Q( W0 @' x; @
/* create a logger instance */0 D. A3 Q" ~: k( |
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
7 x( n, N, p2 M3 s1 J1 |8 h( T( avar loggerBufP = new LoggerBuf.Params();
1 L% g( F" u$ A- n0 d7 bloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
& S5 P! P9 ]/ G8 j& o- [loggerBufP.bufType = LoggerBuf.BufType_FIXED;, g. W3 r7 {" M
( `9 S+ c* P) ^0 a) A7 C7 O
var appLogger = LoggerBuf.create(loggerBufP);
- K  S( {* @. V* M* Z0 N4 iappLogger.instance.name = "AppLog_Core1";4 A7 u: P6 E8 q. ^2 F, @8 r4 R8 |% j
Defaults.common$.logger = appLogger;
3 A7 \9 z- n7 F, T8 v" y+ k: CMemory.defaultHeapSize = 0x8192;    / J' ]8 {. y+ H8 o
Idle.idleFxns[0] = "&LEDStatus";
! `7 n1 u9 g$ ^8 `Cache.initSize.l2Size = Cache.L2Size_32K;3 P, M7 B; H5 J" F; @

8 T# K. T" e3 S/ j9 M8 d
回复 支持 反对

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-3-10 14:44 , Processed in 0.044668 second(s), 27 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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