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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
& K' ~* B2 r- V' P7 L$ j6 K6 S, S8 T; P# |) Q
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256& b+ z+ y. H+ r5 T- p

  h) `1 U! G5 k& ~5 B6 u其他程序段。。。。。
- o. a; R# r) @, x
. A2 Z5 `; k4 ], E$ ^$ Y: a   free(x_d);
% i/ F! Z5 \) C5 p6 a& A6 G( [
使用DSP侧单独调试功能,验证动态申请没有问题,
! Q, D, n4 Z+ `9 E  ^- x  _8 e1 w( R- d
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
3 N  K6 N3 s$ k* h9 ?6 \* U
! l. O6 h. K6 J- d6 E
% P; G- Q( h# m- g; C5 t! t; A
  B9 o+ n# ?1 _! `1 t

3 b* |9 P( d% m5 Z; \1 G
% B3 ]6 f/ g5 F1 _/ O" F0 [# N7 ^$ o" w$ N  b$ W

" X8 B* X+ L7 @( \9 o  L. f1 K1 g
7 W' z7 _7 m! Y8 }
9 W/ G5 K2 C9 X. q7 n- ^8 e0 w* h0 V( G0 ~- Y6 B2 j' K
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
/ j) c, y7 n- {我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
2 y- q1 l5 c2 {3 U(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
$ X; l7 c  F8 l) x! L

, K; u7 v- `  B# v是不是需要在DSP.CFG中进行配置" {, [& H0 Y  v' C, I
我现在的配置为. L9 K4 c9 g4 |5 q

1 G) M/ W- X. ]3 c2 M; J/*# `( l$ I2 ~% c! Y4 \2 e7 R
*  ======== Operating System Configuration ========& v: g9 |( k5 m! P' T
*/
+ v6 b& K  K! w, F# a7 E! I) C- v  Q# s8 A) }; H! b# K8 y: ~
/* no rts heap */
: Z5 l* i% i, i3 ~Program.heap = 0;; e3 C/ H" F# e' s; B6 }
Program.argSize = 100;  /* minimum size */
$ Y8 m. P" @! j1 L' @Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大4 B: [3 r8 ~3 ^' N6 W/ X, I

# s2 Z, e! Z+ C) E/* create a default heap */0 s# s. b  B: m3 f6 R
var HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');  ~/ {* I% {. O- ?- I% c8 Z+ u5 c
var heapMemParams = new HeapMem.Params();4 C6 K+ K" x  u
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大' z. t7 F- t6 Z) ?* A

! _& Z' k( M! q
var Memory = xdc.useModule('xdc.runtime.Memory');
  ]" o6 u/ f" U- T4 q7 W1 }Memory.defaultHeapInstance = HeapMem.create(heapMemParams);, T) E7 q" Z) _: ^- z5 N
: y: K( ^2 t; g; b6 C: U  V7 ?
/* configure System module */! M7 d1 k$ g, E2 b! W
var SysMin = xdc.useModule('xdc.runtime.SysMin');+ e/ J9 m- K3 w% ?* i6 Y
SysMin.bufSize = 0x1000;
+ [  J7 z6 R5 \  z( X# H- B  E0 mSysMin.flushAtExit = false;. z& |, R0 N; R% Z/ t6 H% C  R$ ?
! d4 r1 t( [2 R! L4 W- _+ Y% B" a
var System = xdc.useModule('xdc.runtime.System');+ k. W& I9 ^' H) R8 \& a
System.SupportProxy = SysMin;
2 f- O0 U, S! I/ ^, K' E& R, S& }# Z: G& c9 w1 P5 U( Y- @
/* configure SysBios to use the lower half of Timer 1 */
8 o0 h& m9 X. P: C* ivar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');
. ~# n; l) r+ Vvar Clock = xdc.useModule('ti.sysbios.knl.Clock');
1 d. m  r, T0 ^+ _' M' gTimer.timerSettings[1].master = true;
" E) f0 ?- R! C: DTimer.defaultHalf = Timer.Half_LOWER;
: |9 f5 h+ X/ \: zClock.timerId = 1;
$ |! S9 _3 h  L9 g% D+ I' v1 E* J

& L1 _& e9 d1 h/*, }3 w2 s" a+ K
*  ======== Miscellaneous Configuration ========
& m" k5 t8 c3 L4 f9 g" J */
9 Q& H* H" q% q" N
" l4 q4 G: O- q2 X( C$ y/* set default diags mask */0 ?& f) r+ h/ z
var Diags = xdc.useModule('xdc.runtime.Diags');1 Z8 }9 h# l7 c4 S( r" n3 g
var Defaults = xdc.useModule('xdc.runtime.Defaults');
. ]+ a. l8 b$ C: g; v6 Q
3 z/ d' M0 {/ m- b: I9 sDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
$ t1 l* u$ j. U3 f8 n6 a9 o' jDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
7 [# J3 C; U2 _* `8 v8 xDefaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;2 q9 \, f  s$ n" O
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
, E* g% O8 U7 ZDefaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
8 ?+ Z3 s3 {2 B2 J$ \" FDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;4 G& b. _' q" j, |5 `+ D( q/ g3 w
Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
; t1 c  p, H4 q2 sDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
1 {  B* V6 g0 yDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;2 F: j; c1 @# `: U
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;
  f: ^7 G' D3 XDefaults.common$.diags_USER5     = Diags.ALWAYS_OFF;8 W( U4 p( {3 y2 N# T1 r
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;2 I, C) c" A2 \2 g4 _
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
* S+ Q$ \2 f* Q0 u4 x# Q$ h" Q, s, HDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;
2 q2 `$ y6 S( Y. A7 A7 j' |8 y# n) w7 g. u
/* override diags mask for selected modules */1 `4 v" e0 q. k; Z# G
xdc.useModule('xdc.runtime.Main');
3 H9 A* n/ `1 Q  UDiags.setMaskMeta(* A1 P# W2 a7 y9 ?4 ]3 V, a. m
    "xdc.runtime.Main",1 |3 d8 }* r$ o) E+ `1 Z. |
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
8 u+ K/ i  l8 q2 I$ v( E    Diags.RUNTIME_ON
$ U( b8 s6 G1 e  Y: U: r);
8 y8 [  {/ `. E: o) d6 N. b4 m' l; _  w, b. q
var Registry = xdc.useModule('xdc.runtime.Registry');
# j- q& ^0 s! WRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
  d+ A! \3 g) F: s* WRegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;) k; f; a) v* _3 N4 t. w
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
! z$ N& T! N3 C- I$ c0 o7 [Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;
8 d7 f* g; [. I2 ]( J% W: N- b1 H" o  R5 H, G
/* create a logger instance */  i* M1 v' `% l: K3 c6 G
var LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');: p7 m$ n7 }% r- N% o/ S2 p; q
var loggerBufP = new LoggerBuf.Params();9 y6 c# ~& X5 A8 N8 N
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */% n+ {' V/ q2 |1 S1 Q
loggerBufP.bufType = LoggerBuf.BufType_FIXED;0 r: U6 n) e4 T8 A- X" [1 _
0 [7 b+ d6 K% ~
var appLogger = LoggerBuf.create(loggerBufP);$ n' S. r8 W: r; t
appLogger.instance.name = "AppLog_Core1";4 X$ A& x+ ]& k
Defaults.common$.logger = appLogger;1 J# K' o, {0 n4 J( |/ T) T
Memory.defaultHeapSize = 0x8192;    9 ^- n( I: F4 w; x
Idle.idleFxns[0] = "&LEDStatus";
# ?' S  s8 I  p, RCache.initSize.l2Size = Cache.L2Size_32K;2 m2 U. D6 G3 G- J1 H) L# _- _( ^1 \
1 u8 s2 h8 J+ Q5 b0 o* a
回复 支持 反对

使用道具 举报

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 */
/ z1 V2 c% t; L5 x$ o! d3 q  q; H/ Mvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
1 m9 l/ K8 _; Evar heapMemParams = new HeapMem.Params();
' Q" Z/ Q# n& i& TheapMemParams.size = 0x4000;, }3 Z+ @& L! c1 }, u

( z) A8 {# q" A& V' v& j, Q; @var Memory = xdc.useModule('xdc.runtime.Memory');
: g: E1 U, X0 X. s7 ]! E% f* JMemory.defaultHeapInstance = HeapMem.create(heapMemParams);- @; y; r& l0 }
4 Z+ t; D) C" R( i8 o
我大约calloc  每次共计大小为5K*16bits,
# L& R4 p9 Y7 Y  t& B& x- E而默认配置才0x4000、需要改大。
. W. f5 k' ^$ h9 v4 T
9 S( q  O/ I( B. w6 L
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
+ p3 K: r% E' I/ D6 c+ YProgram.heap = 0;3 C  ~7 E( R2 D% H! |
Program.argSize = 100;  /* minimum size */+ k) m  K/ a# U6 N; W. w- F
Program.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

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

GMT+8, 2026-4-4 16:30 , Processed in 0.041338 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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