关于OMAPL138在SYSBIOS下DSP侧动态申请内存问题 - OMAP-L138 - 嵌入式开发者社区 - 51ele.net
设为首页收藏本站

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

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

  O, {' Z! y0 p, z# c4 K! n    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256
+ S* W" j$ Z1 r$ {& L: U" O/ [1 l+ P- _6 \! y
其他程序段。。。。。
. e! `# O  i# U% l0 h - k; T( M0 U! s7 M$ o8 m7 n' b
   free(x_d);
# A. s( f% m% p. W+ k
/ \1 x( d( @5 B" e% m% o% P, T$ x使用DSP侧单独调试功能,验证动态申请没有问题,6 w1 ?; R- r' S+ M/ f0 {2 O+ |
' S9 h) F% s1 k" Y0 h5 j
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。
/ z: G$ k& y$ n' T: u+ {

  D6 }* M8 l1 K. H+ y- X1 O& f+ ^0 H8 ?8 m9 l
5 s" b5 t: x4 g9 R9 f
' ^. m( Q! r5 w- k* e1 P6 O
- f! M& W& Q! u$ U+ R  |. D
# W' j) J2 B% M/ g& ]

; i* V* C3 b3 Y8 B/ Y3 T; p! e( J4 C1 X+ K9 S1 j  E
% T" x' Y6 w+ @3 |  r; _

. s" ^" U# \) s8 {+ D" e
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明0 @' S7 m) l, ~* o, {
我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
, F1 S7 p/ O5 ~8 A9 l- H. Y2 ?(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
  @1 t) A3 W5 @
" b1 J/ L8 _' f. G- Q
是不是需要在DSP.CFG中进行配置# _3 s# S% c+ Z1 f
我现在的配置为9 ]) X) s2 K$ S( V" S$ ~

% E0 V! X, ?# a8 F* }- |/*
& Y4 |' f) {4 J7 i: [. @7 ` *  ======== Operating System Configuration ========) A/ y' G- C( i% ^% u
*/9 P% |. t" z( x! ~; i: w

/ ]( B5 @4 ^; H- q  b7 L/* no rts heap */' o! y; X! p* }  O! J
Program.heap = 0;1 y. y1 |3 v6 X! Y. ^& g& j
Program.argSize = 100;  /* minimum size */' p* X8 E% X1 f$ L. X# K
Program.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大
1 ^1 c, E; m: `0 n5 X$ {
" i( i; P8 y: n! ]) e! a/* create a default heap */
0 |2 w4 v' t: ]( Ovar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
9 A9 {; c. e: H. x/ [$ H5 E+ avar heapMemParams = new HeapMem.Params();, {/ L) j$ S2 B5 K9 u* t
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大
3 H* z( i9 s1 E) }8 U+ e
7 [; Y& t; l$ @7 K
var Memory = xdc.useModule('xdc.runtime.Memory');+ V* K! [2 l# B9 \, q$ u- h4 q" X
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);1 c$ ^0 E* A- s8 C5 J7 ]

# F  r, m+ j" H/* configure System module */; _7 E4 o/ k0 I% l1 j) I
var SysMin = xdc.useModule('xdc.runtime.SysMin');4 ~  ~" Q$ F3 _
SysMin.bufSize = 0x1000;
7 ]; P; R1 l6 o& r- f  N" jSysMin.flushAtExit = false;2 P. d" T9 E. U2 r" D4 a5 [
% v2 r, I3 H; b9 K- Z
var System = xdc.useModule('xdc.runtime.System');5 b, Y& V% e2 A3 \" v
System.SupportProxy = SysMin;
$ A, U. F7 N/ U. m# n$ _* T. k# l# i
7 o- l! U: l2 c9 T% ~/* configure SysBios to use the lower half of Timer 1 */
( Z# G# p  O, O8 H% Evar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');: T* {+ z9 n$ d
var Clock = xdc.useModule('ti.sysbios.knl.Clock');$ f2 k& s, \+ \1 V7 j9 |
Timer.timerSettings[1].master = true;& I' H# N$ A6 I; [/ t% m8 k8 M+ j' }4 U4 a
Timer.defaultHalf = Timer.Half_LOWER;9 A; I9 h, \, k0 D. D( p7 n# q8 V
Clock.timerId = 1;
+ v: `2 x# ?6 S) m2 Y, [; j
* Q' G8 e- [  {! A
# |; d) i* x: r/*
7 W: }/ G" a7 {1 J* K4 Q5 g9 d *  ======== Miscellaneous Configuration ========( q2 k$ o1 T1 B( j/ v, u4 J% x
*/
6 a; n1 q% V5 j7 S# L" Z9 t
; X5 R7 c: T, O% U/* set default diags mask */* e7 {$ H. M& ]- I9 v4 Y8 t, l9 _
var Diags = xdc.useModule('xdc.runtime.Diags');
6 W2 P7 C% b2 }var Defaults = xdc.useModule('xdc.runtime.Defaults');+ m  e- F5 c6 e- Z

% ?$ w9 h; u. w# X, C2 M9 j4 mDefaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
. N3 O2 X: W1 _1 F. VDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;- ~+ R# V" R, P
Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;
2 ^. ?+ U8 F1 ~1 iDefaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */3 ~* m+ e+ x0 P3 e2 e/ g
Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */$ \  M" Q* z) a. b
Defaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
1 g4 e8 p0 Q' F, X. h& PDefaults.common$.diags_USER1     = Diags.ALWAYS_OFF;
- K$ u" p0 D8 s! aDefaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
+ P7 I3 b( j2 n' z6 UDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;6 U1 z: N1 {, g* m8 W; n# v
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;8 Y  F0 i* ~4 P/ f7 t6 R: {
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;4 x( ?2 A' _8 C8 F. ?
Defaults.common$.diags_USER6     = Diags.ALWAYS_OFF;8 ^0 S% y) M0 z2 b# B, K; M
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;7 C4 i, R9 t4 z* e9 l: W4 D9 X
Defaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;" J6 o& p) ]; O+ k: k
. U8 n% C, W! c+ `4 P  [% E: I9 U* v
/* override diags mask for selected modules */
" q5 f+ v4 @: B3 b. axdc.useModule('xdc.runtime.Main');! m: _% u/ Y' t1 e6 q2 \
Diags.setMaskMeta(  M9 w% n- I$ W, c& Z
    "xdc.runtime.Main",3 [8 Z( I; Z, {+ M6 P3 l6 f
    Diags.ENTRY | Diags.EXIT | Diags.INFO,
+ d1 ^; \8 z7 }. q    Diags.RUNTIME_ON
3 r% e* \4 P- x0 s; n);
5 ~/ W/ o/ Z5 h) _4 [+ T; Z- s8 ?$ ]. A5 ~
var Registry = xdc.useModule('xdc.runtime.Registry');
: [$ k: H% \% g4 `Registry.common$.diags_ENTRY = Diags.RUNTIME_OFF;
% a( r9 f. x( p, ERegistry.common$.diags_EXIT  = Diags.RUNTIME_OFF;
0 m& ~+ J! i4 z, X8 F0 vRegistry.common$.diags_INFO  = Diags.RUNTIME_OFF;: O: F' o8 H8 ]4 B$ g
Registry.common$.diags_USER1 = Diags.RUNTIME_OFF;& R" d' ~) k' S- n' y

1 _' }+ {( d8 x. }2 Y+ D5 n! K/* create a logger instance */
7 W% Y' k6 P& J; I# X( svar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');3 t1 `/ V, z( w# u, j5 C4 x+ R  p
var loggerBufP = new LoggerBuf.Params();# i% x$ M- y- s5 t* z2 a
loggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */
; q% m% a9 I  S9 p% a) m. ~. |loggerBufP.bufType = LoggerBuf.BufType_FIXED;9 ^/ s9 J) V4 O' M
' G1 H! w( u8 [. D
var appLogger = LoggerBuf.create(loggerBufP);" q+ F6 o6 A7 [/ i) I; z0 _
appLogger.instance.name = "AppLog_Core1";4 F0 M. P7 `' S/ u( P# w) a7 p& C4 x7 W
Defaults.common$.logger = appLogger;
! Z% y  d& V" ]: TMemory.defaultHeapSize = 0x8192;   
& X5 {4 |* m% M4 m- AIdle.idleFxns[0] = "&LEDStatus";$ g5 j. ^/ E6 J4 |$ s* d9 c/ ?6 d' s
Cache.initSize.l2Size = Cache.L2Size_32K;7 D4 \4 r; S1 p9 G1 L

  X5 p1 ]% @5 f1 q9 a2 o& P
回复 支持 反对

使用道具 举报

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 */
3 u; Y- Q. {; q: ]2 W9 ~, {  Dvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
9 Z8 F& ]" |. i( Yvar heapMemParams = new HeapMem.Params();. G" W+ G  Q3 J9 b- g
heapMemParams.size = 0x4000;; {) Z. B- f2 t, _7 b- |% _) b6 D

7 e- D3 ^2 b  {! P% \- cvar Memory = xdc.useModule('xdc.runtime.Memory');
8 L1 E5 A+ w9 O8 ?7 uMemory.defaultHeapInstance = HeapMem.create(heapMemParams);
3 V! ~+ C# c6 A" o% y( Q. R& n9 O8 r# N7 u+ D1 q6 ?" _8 o/ o
我大约calloc  每次共计大小为5K*16bits,
1 o/ m$ B- T, f) e4 P% W而默认配置才0x4000、需要改大。
: h4 |' o3 X" o2 n/ r4 q9 Y4 ?* q& T: S. b$ E. _
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
0 p' v9 i. R) [2 {Program.heap = 0;
3 n4 Y- {; J1 d8 ?4 C9 n0 Q% x/ Q3 sProgram.argSize = 100;  /* minimum size */
3 f3 f# n* F. z) WProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-9 14:52 , Processed in 0.042037 second(s), 23 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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