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

嵌入式开发者社区

 找回密码
 立即注册

QQ登录

只需一步,快速开始

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

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

[复制链接]

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
跳转到指定楼层
楼主
发表于 2015-9-4 08:33:31 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
创龙工程师你好,我在OMAPL138单独调试DSP程序(使用SYSBIOS)时,在任务中使用calloc函数动态申请内存,用完后free,类似如下结构
& E9 H* _8 a! L8 A3 `  r$ s1 E! Q5 z
    float *x_d=(float  *)calloc(len_in,sizeof(float));                    //256/ j" Z+ P/ u5 N0 ^: u

* i8 ^! ?% O- x6 R其他程序段。。。。。
5 O6 ~* Z2 h* a7 Z- S4 P 8 k1 B8 l! L$ u! F/ R
   free(x_d);
. z9 T- ]+ G1 r" h2 y4 o4 s: r# |
" [7 H+ E; F$ V- ?使用DSP侧单独调试功能,验证动态申请没有问题,
" j, F6 z/ z$ k" I+ O/ Q% C' a* j! Y3 o- H+ w; x- z/ W
但是,当ARM侧加载DSP核心程序实际运行时,上述函数申请的内存好像失败,没有成功。请问是不是需要在哪里设置。# U; h+ C' G0 I# v3 }
2 N% c% P  ^1 D  Q& k
7 d/ h" a8 f2 B8 q, e

8 u+ A. a. T4 m8 @0 `0 {+ r
  E; f1 d% _) b& w! k. |) C( V' F% Q( w$ f/ @
' o& j8 r; y7 r0 c

" B* }$ B  \( g, n5 k) K* |; V* ?. i/ P% P! u
: w% `- `& u  |" y) F

1 Q2 a- e; }; l8 L5 b6 N# A4 E
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享淘帖
回复

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
沙发
 楼主| 发表于 2015-9-4 10:29:21 | 只看该作者
补充说明
1 ?0 C6 N+ ?) n. C! e4 N" A, ]  j我大约calloc  每次共计大小为5K*16bits,怀疑哪里需要配置一下
( _: ?. X2 R& b  E1 H(不过疑惑的是,为何单独DSP仿真就没有问题呢?)
5 F) I$ W" t& t8 D  R' A, e2 q

5 N( y' w& o  h, X* r0 p是不是需要在DSP.CFG中进行配置" `& h! a7 R7 [( E$ o7 z$ V
我现在的配置为" Y( S# m* Y/ l
! M& G% t; z8 O/ ^- {# E- F
/*
2 \! u- F0 L& ?7 G; {$ I4 l *  ======== Operating System Configuration ========
- V; k2 j* i- ^- a" Y( _ */3 f0 C2 o6 @& M% E
6 H! G3 F! ~/ g5 n7 c* m
/* no rts heap */
0 \; M9 c3 x. G! `8 L' j" jProgram.heap = 0;, ?. j4 h- E1 ~$ y1 m9 b
Program.argSize = 100;  /* minimum size */
8 I4 p, s# C  W! I' dProgram.stack = 0xF000;                   //此处修改后的值。不太懂,所以改大2 H7 X. a7 B9 V4 \, X( ~

5 Y# F% ^) U' Z3 A1 l/* create a default heap */
* q4 v" r5 ~2 C/ }; ^9 Pvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');9 V& g( {( Q# M( V
var heapMemParams = new HeapMem.Params();' z  B/ x$ l2 g; X2 v3 q
heapMemParams.size = 0xFf00;           
//此处修改后的值。不太懂,所以改大5 r6 x6 v& r1 J7 l. ^* i
/ M/ d& |. N8 ]2 C8 ]
var Memory = xdc.useModule('xdc.runtime.Memory');- {- S6 [- g- Y- V/ H0 E0 F
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);* B) a. M7 S) g0 d6 r7 Z7 a
3 ^! G5 v& C$ I; H, L5 W' r% y
/* configure System module */$ s5 e" i. U8 `
var SysMin = xdc.useModule('xdc.runtime.SysMin');
7 R/ x6 N$ a! K0 B# o# `& eSysMin.bufSize = 0x1000;2 J2 L+ h, E! s! N
SysMin.flushAtExit = false;
# ^: P0 A* B6 g& k# R  @9 G( n+ `! P5 U" Q* W$ E
var System = xdc.useModule('xdc.runtime.System');
( w. H8 w7 b! i% g4 O/ l  aSystem.SupportProxy = SysMin;7 n" Z7 V# g7 i% F

8 Y' z4 U+ |  r  s( F# O" K/* configure SysBios to use the lower half of Timer 1 */
! j2 f1 B# G1 h5 c  Qvar Timer = xdc.useModule('ti.sysbios.timers.timer64.Timer');5 `5 f! A) v, x8 J# G3 }- P
var Clock = xdc.useModule('ti.sysbios.knl.Clock');9 o5 O0 c& n, X9 ?# z9 V
Timer.timerSettings[1].master = true;
, r7 l; U/ {% |0 x' {' o4 V" F: N& LTimer.defaultHalf = Timer.Half_LOWER;
, H9 H# H/ m' |Clock.timerId = 1;" k" ]$ x: M8 y& ?3 @" O' }
& f8 {" B! d7 Y2 y( C
% ?  F2 a- H* l# \
/*
  _2 u/ X/ {# v *  ======== Miscellaneous Configuration ========
, m: _9 c! W' @ */
# z- D# i# z8 z8 j- i! N8 F9 R4 t+ a+ w7 T
/* set default diags mask */
8 [# Y' i/ U& N6 T/ ivar Diags = xdc.useModule('xdc.runtime.Diags');5 M8 T- H1 t, G- Y/ [
var Defaults = xdc.useModule('xdc.runtime.Defaults');
4 {$ P0 L4 b/ x) F+ m( p! [' N3 R2 I& N0 Q4 [8 l" \/ S
Defaults.common$.diags_ENTRY     = Diags.ALWAYS_OFF;
# \. z2 e& w% v% [0 EDefaults.common$.diags_EXIT      = Diags.ALWAYS_OFF;
  v1 \1 h9 @; r3 c3 G+ K4 _Defaults.common$.diags_LIFECYCLE = Diags.ALWAYS_OFF;0 V: p" p0 l. N  G
Defaults.common$.diags_INTERNAL  = Diags.ALWAYS_OFF;  /* needed for asserts */
& E% I3 C5 K1 r) U$ w+ R# W% A7 ]Defaults.common$.diags_ASSERT    = Diags.ALWAYS_OFF;  /* development only   */
# d/ ?0 H8 J( p. r3 v" WDefaults.common$.diags_STATUS    = Diags.RUNTIME_ON;
  [! Q4 T0 s: `- N& @! F9 m$ ~Defaults.common$.diags_USER1     = Diags.ALWAYS_OFF;+ @9 [. A0 _5 N* w% M& V
Defaults.common$.diags_USER2     = Diags.ALWAYS_OFF;
: }" n+ ]+ L& N) W' I" r4 a* T0 BDefaults.common$.diags_USER3     = Diags.ALWAYS_OFF;! v/ e0 X! m6 M
Defaults.common$.diags_USER4     = Diags.ALWAYS_OFF;) b& @4 c+ {0 x& k5 ]
Defaults.common$.diags_USER5     = Diags.ALWAYS_OFF;
; [0 C/ q$ Y0 w2 Q; \* m) SDefaults.common$.diags_USER6     = Diags.ALWAYS_OFF;- V1 [2 i* o; U; c) i6 L+ E+ S. l
Defaults.common$.diags_INFO      = Diags.ALWAYS_OFF;
7 F% Y$ W" N3 Y7 p6 V& XDefaults.common$.diags_ANALYSIS  = Diags.ALWAYS_OFF;. z$ T$ R9 f$ E( ]+ p+ d5 u
6 S2 a0 R4 ^, a4 `! v' r9 D3 u& \7 g
/* override diags mask for selected modules */  G+ P2 C0 e4 M7 d& N
xdc.useModule('xdc.runtime.Main');0 P& S" i/ B6 Z& H
Diags.setMaskMeta(
9 g) G9 r* S/ j. v6 s    "xdc.runtime.Main",: Y' e- `9 @. ~& }4 n3 Y$ ~5 w; [6 X6 ^
    Diags.ENTRY | Diags.EXIT | Diags.INFO,; A' c1 K: q5 o. d- h/ v' e% u
    Diags.RUNTIME_ON
5 v/ P3 R' Z/ b& i$ [);
; s8 e5 @( v& G4 e" K! t' O: y, {' M, Q& x
var Registry = xdc.useModule('xdc.runtime.Registry');
) @) |2 h5 O, r1 _- j% VRegistry.common$.diags_ENTRY = Diags.RUNTIME_OFF;$ |1 R2 j2 ]$ ^5 p: R& f1 J
Registry.common$.diags_EXIT  = Diags.RUNTIME_OFF;9 _# i1 O$ w. F
Registry.common$.diags_INFO  = Diags.RUNTIME_OFF;
% n8 Z  ?+ r, _& S, `; KRegistry.common$.diags_USER1 = Diags.RUNTIME_OFF;: p/ X* [) ^6 W
4 h) ^  s& j" D5 M( B
/* create a logger instance */
0 m7 W4 k, H. G2 F2 Cvar LoggerBuf = xdc.useModule('xdc.runtime.LoggerBuf');
2 g3 E! X: v! avar loggerBufP = new LoggerBuf.Params();
+ K9 u7 O5 Y5 i; qloggerBufP.numEntries = 128;  /* 128 entries = 4 KB of memory */" \1 z4 C$ h, K, N7 h
loggerBufP.bufType = LoggerBuf.BufType_FIXED;
5 _- F9 I, E0 G" k! A1 T2 M
" f$ U% |9 T/ L# rvar appLogger = LoggerBuf.create(loggerBufP);
$ @5 |; f, O1 ^appLogger.instance.name = "AppLog_Core1";$ }; C% X; i% Q5 h. c
Defaults.common$.logger = appLogger;/ W' e7 |: b6 h9 [5 H8 b  y
Memory.defaultHeapSize = 0x8192;   
  H9 n' h$ A- ~  h# \1 h% s, [Idle.idleFxns[0] = "&LEDStatus";
7 f& _  u; a: H3 m& ^# w7 DCache.initSize.l2Size = Cache.L2Size_32K;
* J/ Q8 v3 @9 l  X6 b
/ s% S. w, t$ _7 O8 `) T5 g
回复 支持 反对

使用道具 举报

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 */
) g1 d+ }. q' L4 ]5 vvar HeapMem = xdc.useModule('ti.sysbios.heaps.HeapMem');
( i1 a$ [* ^! r; ^+ y! n% Qvar heapMemParams = new HeapMem.Params();
6 s/ h7 ~+ g% y% ^( V! z3 vheapMemParams.size = 0x4000;. U+ p% E! @' R8 \

* \- f, U. o4 Z  Gvar Memory = xdc.useModule('xdc.runtime.Memory');& L9 r8 V2 n2 w' M! W# T' h
Memory.defaultHeapInstance = HeapMem.create(heapMemParams);
/ B9 U% ^( ?5 B; Q/ z0 u  l) s7 T
6 p/ k* K7 ~2 {. _4 |' }我大约calloc  每次共计大小为5K*16bits,8 ?* G+ s, W. a
而默认配置才0x4000、需要改大。7 k4 ]: j6 X) G- n, I; \

! M6 C& _8 d+ k3 k( g
回复 支持 反对

使用道具 举报

19

主题

74

帖子

253

积分

中级会员

Rank: 3Rank: 3

积分
253
5#
 楼主| 发表于 2015-10-28 16:14:47 | 只看该作者
/* no rts heap */
) d, b2 S9 O  [' \( H, b4 aProgram.heap = 0;
1 e- w: u6 g, EProgram.argSize = 100;  /* minimum size */
4 n5 E$ X. y. Y# Q; AProgram.stack = 0xF000;                   //我改到F000  也不行
回复 支持 反对

使用道具 举报

0

主题

161

帖子

1093

积分

创龙

Rank: 8Rank: 8

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

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-12-29 07:53 , Processed in 0.065703 second(s), 25 queries .

Powered by Discuz! X3.2

© 2001-2015 Comsenz Inc.

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